import { cartPost, cartPut } from "../api/cake"

export default {
	namespaced:true,
	state:()=>({
		popShow:false,
		popData:null,  // 存放弹窗数据
		cartList:[],  //   购物车列表
		editIdx:-1,   // -1代表新增、0，1...代表被编辑的购物车商品序号
		cartId:''  //记录当前用户在购物车数据库中的唯一id
	}),
	getters:{
		totalInfo(state){
			//根据cartList里面的ischeck动态换算出全选状态
			let allCheck = true //假设是已经全选
			let totalPrice = 0 //应付金额
			state.cartList.forEach(item=>{
				if(!item.ischeck){
					allCheck = false
				}
				if(item.ischeck){
					let {list,dropIdx,num} = item
					totalPrice += list[dropIdx].price * num
				}
			})
			return {
				allCheck,
				totalPrice
			}
		}
	},
	mutations:{
		popShowMut(state,bool){
			state.popShow = bool
		},
		popDataMut(state,cakeGood){
			state.popData = cakeGood
			console.log(334,cakeGood);
		},
		//弹窗组件的确认按钮，【1.编辑】【2.新增已经存在的商品】【3.新商品】
		cartAddMut(state,cartGood){
			let {cartList,editIdx} = state
			if(editIdx!=-1){
				cartList[editIdx] = cartGood //替换原来的数据
				state.cartList = [...cartList]  //解决编辑数据无法响应视图的问题
				return
			}
			//2.当前待加入的商品是否已经存在于购物车中（objectId、dropIdx）
			for(let i=0;i<state.cartList.length;i++){
				let {objectId,dropIdx} = state.cartList[i]
				if(objectId==cartGood.objectId&&dropIdx==cartGood.dropIdx){
					//存在相同商品
					state.cartList[i].num+=cartGood.num
					return
				}
			}
			//3.新增不同的新商品
			state.cartList.push(cartGood)
		},
		//单选
		cartCheckMut(state,idx){
			state.cartList[idx].ischeck = !state.cartList[idx].ischeck
		},
		//全选
		cartAllCheckMut(state,bool){
			// 此处的bool是触发前，原本的全选状态
			state.cartList.forEach(item=>{
				item.ischeck = !bool
			})
		},
		//删除
		cartDelMut(state,idx){
			state.cartList.splice(idx,1)
		},
		editIdxMut(state,idx){
			state.editIdx = idx
		},
		//初始化购物车列表
		initCartListMut(state,list){
			state.cartList = list
		},
		cartIdMut(state,cartId){
			state.cartId = cartId
		}
	},
	actions:{
		//向数据库新增、更新购物车数据
		async cartPostAction(context,userId){
			let {cartList,cartId} = context.state
			console.log('action',userId,cartList);
			// 如果线上没有当前用户对应的购物车数据，新增
			if(cartId){
				await cartPut(cartId,cartList) //更新
			}else{
				await cartPost(userId,cartList) //新增
			}
			context.commit('initCartListMut',[])
		}
	}
}